package JAVACORE_TRAINING.OOPS_CONCEPTS.ARRAY_AND_COLLECTIONS.STATIC_ARRAYS.EXAMPLES;

public class Models {
	/***
     * Nghiệp vụ tính tổng giá trị trong mảng 1 chiều tĩnh
     * @param myDouble
     * @return
     */
    public double SumOfElement(double[] dArray) {
        double dSum = 0;
        for (int i = 0; i < dArray.length; i++) {
        	dSum += dArray[i];
        }
        return dSum;
    }
    
    /**
     * Tìm kiếm giá trị lớn nhất trong mảng
     * @param myList
     * @return
     */
    public double FindMaxElement(double[] dArray) {
        double dMax = dArray[0];
        for (int i = 1; i < dArray.length; i++) {
            // So sánh giá trị
            if (dMax < dArray[i]) {
            	dMax = dArray[i];
            }
        }
        return dMax;
    }

    /**
     * Tìm kiếm giá trị nhỏ nhất trong mảng
     * @param myList
     * @return
     */
    public double FindMinElement(double[] dArray) {
    	double dMin = dArray[0];
        for (int i = 1; i < dArray.length; i++) {
            // So sánh giá trị
            if (dMin > dArray[i]) {
            	dMin = dArray[i];
            }
        }
        return dMin;
    }
    
    /**
     * Nghiệp vụ tìm tập vị trí chứa giá trị lớn nhất hoặc nhỏ nhất
     * @param myList
     * @param iValue - Max hoặc Min
     * @return String: 1-2-3...n
     */
    public String IndexMaxStringElements(double[] dArray, 
    								double dValue) {
        String strOut = "";
        for (int i = 0; i < dArray.length; i++) {
            if (dValue == dArray[i]) {
                if (strOut.isEmpty())
                    strOut += i; // strOut = 1;
                else
                    strOut += "-" + i; // strOut = 1-n
            }
        }
        return strOut;
    }

    /**
     * Nghiệp vụ tìm tập vị trí chứa giá trị Lớn Nhất hoặc Nhỏ Nhất
     * @param myList
     * @param iValue
     * @return - int[] {1,2,3...n}
     */
    public double[] IndexMaxElement(double[] dArray, 
    									double dValue) {
    	double[] dIndexValue;
    	double[] dTemp = new double[dArray.length];
        // Duyệt và tìm tập vị trí chứa giá trị lớn nhất
        int iCount = 0;
        for (int i = 0; i < dArray.length; i++) {
            if (dValue == dArray[i]) {
            	dTemp[iCount] = i;
                iCount++;
            }
        }
        // --> Sao chép toàn bộ giá trị trong mảng iTemp --> mảng iIndexMax
        dIndexValue = new double[iCount];
        System.arraycopy(dTemp, 0, dIndexValue, 0, iCount);

        return dIndexValue;
    }    
}
